/*
* 搜索热词：
* [1,1,2,3,1,2,5,21,1,3,2,1,2]
* 上面数组中前3的高频词是？
*
* 考验的是如何通过一个较为合适的数据结构来解决问题
*
* */
//使用map结构，因为键值对中的键名可以是任意类型
function hotWords(searchHistory,num){ //搜索历史 前n个
    let map = new Map()
    for(let i = 0; i < searchHistory.length; i++){
        let word = searchHistory[i] //获取当前被遍历到的元素
        let count = map.get(word) //变相用于后面的判断计数，只要有值，就能转换为true

        if(count){ //如果这个词不是第一次出现
            map.set(word,count++)
        }else{ //否则就是第一次出现
            map.set(word,1)
        }
    }
    //给得到的map内的数据排序
    let sortArray = Array.from(map.entries()).sort((a,b) => b[1] - a[1])
    //Array.from()把类数组转换成数组，map.entries()得到键值对，a[0]是键名word，a[1]是键值，即word的出现频次

    let hotWordArray = [] //定义一个新数组接收前n个热词
    for(let i = 0; i < num; i++){
        hotWordArray.push(sortArray[i][0]) //sortArray[i][0]就是排好序之后的前i个高频词的键名word
    }
    return hotWordArray
}

let historyWords = ["长安","好帅","长安","好帅","长安","帅","气","好家伙","直呼"]
hotWords(historyWords,2)

let arr1 = [1,3,1,4,5,2,3,5,41,12,4,1,2,3,0,8,6]
hotWords(arr1,3)